<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .redBg{
            background: red;
        }
    </style>
</head>
<body>
<div id="app"></div>
<!--react的核心库-->
<script type="text/javascript" src="../utils/react.development.js"></script>
<!--react的扩展库，专门用于操作DOM-->
<script type="text/javascript" src="../utils/react-dom.development.js"></script>
<!--引入babel，用于解析jsx语法为原生js语法-->
<script type="text/javascript" src="../utils/babel.min.js"></script>
<!--引入prop-type对props进行限制-->
<script type="text/javascript" src="../utils/prop-types.js"></script>

<script type="text/babel">
    // 数据驱动页面  state类比vue组件的data
    class MyComponent extends React.Component{
        constructor(props) {
            super(props);
            this.state={name:"xm",age:18,likeVue:true}
        }
        //限制props的类型
        static propTypes={
            name:PropTypes.string.isRequired,
            age:PropTypes.number
        }
        //设置默认值
        static defaultProps={
            name:'xm',
            age:19
        }
        //render函数是构造函数创建的实例调用的 会调用n+1次 点击数据改变的次数加首次渲染的次数
        render(){
            let {name,age}=this.props
            return (
                <div>
                    <h2>限制prop</h2>
                    <span>{name}{age}</span>
                    <span onClick={this.changeLick}>{this.state.name}今年{this.state.age},{this.state.likeVue?'喜欢':'不喜欢'}vue</span>
                </div>
            )}
        //类中定义的所有方法默认开启严格模式 如果没有定义实例则纸箱undefined
        changeLick=()=>{
            console.log(this,'>>>>>>')
            let likeVue=this.state.likeVue
            //状态需要通过专门的api进行响应式改变否则不触发页面更新
            this.setState({likeVue:!likeVue})
        }

    }
    ReactDOM.render(<MyComponent age={80}/>,document.getElementById('app'))
</script>
</body>
</html>
